题目描述
给你一根长度为 $n$ 的绳子,请把绳子剪成整数长度的 $m$ 段(m、n都是整数,n>1并且m>1),每段绳子的长度记为 $k[0],k[1]…k[m - 1]$ 。请问 $k[0]k[1]…*k[m - 1]$ 可能的最大乘积是多少?例如,当绳子的长度是8时,我们把它剪成长度分别为2、3、3的三段,此时得到的最大乘积是18。
答案需要取模 1e9+7(1000000007),如计算初始结果为:1000000008,请返回 1。
示例 1:
1 | 输入: 2 |
示例 2:
1 | 输入: 10 |
提示:
- $2 <= n <= 1000$
注意:本题与主站 343 题相同:https://leetcode-cn.com/problems/integer-break/
算法
(数学) $O(n)$
思路和 剑指 Offer 14- I. 剪绳子 一样,只是 $n$ 的范围扩大成了 $1000$,在做乘法的时候 $res$ 需要转成 $long long$ 防止爆 $int$。
在代码实现上换了一种写法。
时间复杂度
$O(n)$
空间复杂度
$O(1)$
C++ 代码
1 | class Solution { |